#include "../header.h"

//1.socket : 建立数据报套接字
//2.直接发送sendto
//3.关闭套接字


/**
 * @函数原型: ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);
 * @函数功能: send a message on a socket   向数据包套接字发送数据。
 * @参数说明:    
 * @       参数1: sockfd   套接字
 * @       参数2: buf 要发送的数据
 * @       参数3: len 缓冲区长度
 *  @       参数4：flags ： 0
 *  @       参数5：dest_addr ： 目标地址结构体
 *  @       参数6：地址变量的长度。
 * @返回值: 
 * @param {int} argc
 */
int main(int argc, char const *argv[])
{
    if(argc < 3)
    {
        perror("参数错误!\n");
        return -2 ; 
    }
    int cid = socket(AF_INET,SOCK_DGRAM,0);
    printf("cid = %d\n",cid);

    //2发送
    struct sockaddr_in  caddr = {0};
    caddr.sin_family = AF_INET;
    caddr.sin_port = htons(atoi(argv[2]));
    caddr.sin_addr.s_addr = inet_addr(argv[1]);

    //发送的数据
    //发送端循环发送
    char bufm[128] = "";
    int sendlen = 0 ;
    while(1)
    {
        bzero(bufm,sizeof(bufm));
        //从键盘接受数据发送过去
        fgets(bufm,sizeof(bufm)-1,stdin);
        sendlen = sendto(cid,bufm,strlen(bufm),0,(struct sockaddr*)&caddr,sizeof(caddr));
        printf("发送数据成功:发送数据的长度是:%d\n",sendlen);
        // if(!strncmp(bufm,"quit",4))
        // {
        //     printf("发送端正在退出...\n");
        //     break;;
        // }
    }
    //跳出循环以后就 结束cid
    close(cid);
    return 0;
}
